package com.hugang.threadcreate;

/**
 * 测试Thread中的常用方法
 * 1、start(): 启动当前线程；调用当前线程的run()方法
 * 2、run(): 通常需要重写Thread类中的此方法，将创建的线程要执行的操作声明在此方法中
 * 3、currentThread(): 静态方法，返回执行当前代码的线程
 * 4、getName(): 获取当前线程的名字
 * 5、setName(): 设置当前线程的名字
 * 6、yield(): 释放当前cpu的执行权
 * 7、join(): 在线程a中调用线程b的join()，此时线程a进入阻塞状态，直到线程b执行完毕，则线程a才继续执行
 * 8、stop(): 已过时。强制结束当前线程
 * 9、sleep(long millis): 让当前线程睡眠，参数为毫秒。在指定的时间内，当前线程为阻塞状态
 * 10、isAlive(): 判断当前线程是否还存活
 * <p>
 * <p>
 * 线程的优先级：MAX_PRIORITY=10 MIN_PRIORITY=1 NORM_PRIORITY=5(默认)
 *  getPriority(): 获取当前线程的优先级
 *  setPriority(int p): 设置当前线程的优先级
 *  说明：高优先级的线程要抢占低优先级线程cpu的执行权，但是只是从概率上讲，高优先级线程先执行的概率高，而不是只有当
 *       优先级高的线程执行完之后，低优先级线程才执行。
 *
 * @author hg
 * @date 2020/6/14 15:33
 */
public class ThreadMethodTest {
    public static void main(String[] args) {

        Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
        HelloThread helloThread = new HelloThread("线程1");
//        helloThread.setName("线程一");

        helloThread.setPriority(Thread.MAX_PRIORITY);

        helloThread.start();

        Thread.currentThread().setName("主线程");
        for (int i = 0; i < 100; i++) {
            if (i % 2 == 0) {
                System.out.println(Thread.currentThread().getName() + ":" + Thread.currentThread().getPriority() + ": " + i);
            }
//            if (i == 20) {
//                try {
//                    helloThread.join();
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                }
//            }
        }
        System.out.println(helloThread.isAlive());
    }
}


class HelloThread extends Thread {

    public HelloThread(String name) {
        super(name);
    }

    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            if (i % 2 == 0) {
                System.out.println(Thread.currentThread().getName() + ":" + Thread.currentThread().getPriority() + ": " + i);
            }
            if (i % 20 == 0) {
//                Thread.yield();
            }

//            try {
//                Thread.sleep(10);
//            } catch (InterruptedException e) {
//                e.printStackTrace();
//            }
        }

//        System.out.println(isAlive());
    }
}